/**
 * Arduino两轮小车
 * 
 * 本程序可不受限制的用于学习和教学，商业用途请联系作者。
 * 本程序不对用户因使用程序而造成任何形式的损失负责。
 * 
 * site: http://www.xpstem.com/maker/arduino-vehicle
 * author: billy zhang
 */
 
#ifndef ARDUINO_INFRARED_TRACKING_VEHICLE_H_
#define ARDUINO_INFRARED_TRACKING_VEHICLE_H_

#include <IRremote.h>
#include "XPVehicle.h"
#include "TwoWheelDriven.h"

/**
 * 红外循迹小车类
 * 
 * 小车根据红外循迹模块信息动作。
 * 需红外循迹模块、循线纸配套使用。
 */
class InfraredTrackingVehicle : public XPVehicle
{
   public:
     InfraredTrackingVehicle(const TwoWheelDriven& driven, const LedController& ledCtrl, 
          uint8_t leftTracking, uint8_t rightTracking)
      : XPVehicle(driven, ledCtrl), leftTracking_(leftTracking), rightTracking_(rightTracking)
     {
     }

     void setup() override;
     void drive() override;
     
     ~InfraredTrackingVehicle();

  private:

    void lookAngle(uint8_t angle);
    int lookAround();

    const uint8_t leftTracking_;
    const uint8_t rightTracking_;
    
};

#endif
